//
// Created by wxd on 2025/9/11.
//

#pragma once

#ifndef ILIGHT_H
#define ILIGHT_H

// ILight.h
#pragma once

#include <glm/glm.hpp>
#include <string>
#include <memory>

// 光源类型枚举
enum class LightType {
    NONE,
    Ambient,
    Parallel,
    Point,
    Spot,
    Area
};

// 光源接口类
class ILight {
public:
    virtual ~ILight() = default;

    // 获取光源类型
    virtual LightType getType() const = 0;

    // 获取光源颜色
    virtual glm::vec3 getColor() const = 0;

    // 获取光源强度
    virtual glm::vec3 getIntensity() const = 0;

    // 获取光源名称（用于调试和识别）
    virtual std::string getName() const = 0;

    // 是否启用
    virtual bool isEnabled() const = 0;

    // 设置启用状态
    virtual void setEnabled(bool enabled) = 0;

    // 更新光源（可选，用于动态光源）
    virtual void update(float deltaTime) = 0;

    // 光源对应的唯一traceId
    virtual std::string getTraceId() const = 0;

    // 克隆接口（用于复制光源）
    virtual std::unique_ptr<ILight> clone() const = 0;
};

#endif //ILIGHT_H
